package org.demo.annotation;

import java.lang.reflect.Field;

/**
 * 
 * @author  
 * @date    2012-2-24
 * @file    org.demo.annotation.User.java
 */
// 属性 keys 是一个数组，这时有两种写法
// @Table(keys="stuId")                // 1. 只有一个值
// @Table(keys={"stuId", "courseId"})  // 2. 两个或更多的值
@Table(keys={"stuId", "courseId"})
public class StudentScore {
	
	// 只有一个属性且名称为 value 时有两种写法
	// @Id("stu_id")                   // 1. 简写形式
	// @Id(value="stu_id")             // 2. 带名称的形式
	@Id("stu_id")
	private String stuId;
	
	@Id(value="course_id") 
	private String courseId;
	
	// 属性有默认值时有两种写法
	// @Column(name="score")           // 1. 有默认值的属性可以不写
	// @Column(name="note", desc="备注") // 2. 也可以把所有属性都写出来
	@Column(name="score")
	private String score;
	
	@Column(name="note", desc="备注")
	private String note;
	
	/**
	 * 通过反射读取注解内容
	 * @param args
	 */
	public static void main(String[] args) {
		Field[] fields = StudentScore.class.getDeclaredFields();
		for (Field f : fields){
			System.out.printf("%-10s", f.getName());
			
			Id id = f.getAnnotation(Id.class);
			if (id != null){
				System.out.printf("%10s %s", "id:", id.value());
			}
			
			Column column = f.getAnnotation(Column.class);
			if (column != null){
				System.out.printf("%10s %s", "column:", 
						"{" 
						+ "name: " + column.name() + ", " 
						+ "desc: " + column.desc() 
						+ "}");
			}
			System.out.println();
		}
	}
}